/* Zatok - язык программирования текстовых игр
 * (С) 2010 - 2012 Меркулов Матвей Юрьевич
 * Код лицензирован под лицензией GNU LGPL
 * Вы можете прочитать текст лицензии по адресу:
 * http://www.gnu.org/copyleft/lesser.html
 * или прочитать русский перевод по адресу:
 * http://ru.wikisource.org/wiki/GNU_Lesser_General_Public_License
 */

package base.value;

import base.CObject;
import java.util.LinkedList;

public class CArrayValue extends CValue {
	public CValue[] Values;



	@Override
	public CType GetType() {
		return CType.Array;
	}

	
	
	@Override
	public boolean ToBoolean() {
		return Values.length != 0;
	}

	

	@Override
	public String ToString() {
		String String = "";
		for( CValue Value : Values ) {
			if( !String.isEmpty() ) String += ", ";
			String += Value.ToString();
		}
		return "[ " + String + " ]";
	}



	@Override
	public CValue[] ToArray(){
		return Values;
	}
	
	

	@Override
	public LinkedList<CValue> ToList() {
		LinkedList<CValue> List = new LinkedList<CValue>();
		for( CValue Value : Values ) List.addLast( Value );
		return List;
	}



	@Override
	public void EquateTo( CObject Obj ) {
		Values = Obj.ToArray();
	}
	
	
	
	@Override
	public boolean IdenticalTo( CValue Obj ) {
		if( Obj.GetType() != CType.Array ) return false;
		CValue[] Array = Obj.ToArray();
		if( Array.length != Values.length ) return false;
		for( int N = 0; N < Values.length; N ++ ) {
			if( !Values[ N ].IdenticalTo( Array[ N ] ) ) return false;
		}
		return true;
	}
	
	
	
	@Override
	public CValue Clone() {
		CArrayValue ClonedValue = new CArrayValue();
		ClonedValue.Values = new CValue[ Values.length ];
		for( int N = 0; N < Values.length; N++ ) ClonedValue.Values[ N ] = Values[ N ].Clone();
		return ClonedValue;
	}
	
	
	
	public static CValue[] JoinArrays( CValue[] Array0, CValue[] Array1 ) {
		CValue[] NewArray = new CValue[ Array0.length + Array1.length ];
		for( int N = 0; N < Array0.length; N++ ) {
			NewArray[ N ] = Array0[ N ].Clone();
		}
		for( int N = 0; N < Array1.length; N++ ) {
			NewArray[ N + Array0.length ] = Array1[ N ].Clone();
		}
		return NewArray;
	}
	
	
	
	
	public static CValue[] Slice( CValue[] Array, int FromIndex, int ToIndex ) {
		CValue[] NewArray = new CValue[ ToIndex - FromIndex + 1 ];
		for( int N = FromIndex; N <= ToIndex; N++ ) {
			NewArray[ N - FromIndex ] = Array[ N ].Clone();
		}
		return Array;
	}
	
	
	
	@Override
	public String toString() {
		return ToString();
	}
	
	
	 
	@Override
	public void ReplaceValue( CValue[] NewValues ) {
		Values = NewValues;
	}
}
